home *** CD-ROM | disk | FTP | other *** search
/ X User Tools / X User Tools (O'Reilly and Associates)(1994).ISO / sun4c / archive / tcltk.z / tcltk / slib / tk / demos / ixset < prev    next >
Text File  |  1994-09-20  |  8KB  |  315 lines

  1. #!///////////////////////////////////////////////////////////////////////////usr/STAGE/bin/wish -f
  2.  
  3. #
  4. # A nice interface to "xset" to change X server settings
  5. #
  6. # History :
  7. #   91/11/23 : pda@masi.ibp.fr, jt@ratp.fr : design
  8. #   92/08/01 : pda@masi.ibp.fr : cleaning
  9. #
  10.  
  11. #
  12. # Button actions
  13. #
  14.  
  15. proc quit {} {
  16.     destroy .
  17. }
  18.  
  19. proc ok {} {
  20.     writesettings
  21.     quit
  22. }
  23.  
  24. proc cancel {} {
  25.     readsettings
  26.     dispsettings
  27. }
  28.  
  29. # apply is just "writesettings"
  30.  
  31.  
  32. #
  33. # Read current settings
  34. #
  35.  
  36. proc readsettings {} {
  37.     global kbdrep ;    set kbdrep    "on"
  38.     global kbdcli ;    set kbdcli    0
  39.     global bellvol ;    set bellvol    100
  40.     global bellpit ;    set bellpit    440
  41.     global belldur ;    set belldur    100
  42.     global mouseacc ;    set mouseacc    "3/1"
  43.     global mousethr ;    set mousethr    4
  44.     global screenbla ;    set screenbla    "blank"
  45.     global screentim ;    set screentim    600
  46.     global screencyc ;    set screencyc    600
  47.  
  48.     set xfd [open "|xset q" r]
  49.     while {[gets $xfd line] > -1} {
  50.     set kw [lindex $line 0]
  51.  
  52.     case $kw in {
  53.         {auto}
  54.         {
  55.             set rpt [lindex $line 1]
  56.             if {[expr "{$rpt} == {repeat:}"]} then {
  57.             set kbdrep [lindex $line 2]
  58.             set kbdcli [lindex $line 6]
  59.             }
  60.         }
  61.         {bell}
  62.         {
  63.             set bellvol [lindex $line 2]
  64.             set bellpit [lindex $line 5]
  65.             set belldur [lindex $line 8]
  66.         }
  67.         {acceleration:}
  68.         {
  69.             set mouseacc [lindex $line 1]
  70.             set mousethr [lindex $line 3]
  71.         }
  72.         {prefer}
  73.         {
  74.             set bla [lindex $line 2]
  75.             set screenbla [expr "{$bla} == {yes} ? {blank} : {noblank}"]
  76.         }
  77.         {timeout:}
  78.         {
  79.             set screentim [lindex $line 1]
  80.             set screencyc [lindex $line 3]
  81.         }
  82.     }
  83.     }
  84.     close $xfd
  85.  
  86.     # puts stdout [format "Key REPEAT = %s\n" $kbdrep]
  87.     # puts stdout [format "Key CLICK  = %s\n" $kbdcli]
  88.     # puts stdout [format "Bell VOLUME = %s\n" $bellvol]
  89.     # puts stdout [format "Bell PITCH = %s\n" $bellpit]
  90.     # puts stdout [format "Bell DURATION = %s\n" $belldur]
  91.     # puts stdout [format "Mouse ACCELERATION = %s\n" $mouseacc]
  92.     # puts stdout [format "Mouse THRESHOLD = %s\n" $mousethr]
  93.     # puts stdout [format "Screen BLANCK = %s\n" $screenbla]
  94.     # puts stdout [format "Screen TIMEOUT = %s\n" $screentim]
  95.     # puts stdout [format "Screen CYCLE = %s\n" $screencyc]
  96. }
  97.  
  98.  
  99. #
  100. # Write settings into the X server
  101. #
  102.  
  103. proc writesettings {} {
  104.     global kbdrep kbdcli  bellvol bellpit belldur
  105.     global mouseacc mousethr  screenbla screentim screencyc
  106.  
  107.     set bellvol        [.bell.vol get]
  108.     set bellpit        [.bell.val.pit.entry get]
  109.     set belldur        [.bell.val.dur.entry get]
  110.  
  111.     if {[expr "{$kbdrep} == {on}"]} then {
  112.     set kbdcli    [.kbd.val.cli get]
  113.     } else {
  114.     set kbdcli    "off"
  115.     }
  116.  
  117.     set mouseacc    [.mouse.hor.acc.entry get]
  118.     set mousethr    [.mouse.hor.thr.entry get]
  119.  
  120.     set screentim    [.screen.val.le.tim.entry get]
  121.     set screencyc    [.screen.val.le.cyc.entry get]
  122.  
  123.     exec xset \
  124.     b $bellvol $bellpit $belldur \
  125.     c $kbdcli \
  126.     r $kbdrep \
  127.     m $mouseacc $mousethr \
  128.     s $screentim $screencyc \
  129.     s $screenbla
  130. }
  131.  
  132.  
  133. #
  134. # Sends all settings to the window
  135. #
  136.  
  137. proc dispsettings {} {
  138.     global kbdrep kbdcli  bellvol bellpit belldur
  139.     global mouseacc mousethr  screenbla screentim screencyc
  140.  
  141.     .bell.vol set $bellvol
  142.     .bell.val.pit.entry delete 0 end
  143.     .bell.val.pit.entry insert 0 $bellpit
  144.     .bell.val.dur.entry delete 0 end
  145.     .bell.val.dur.entry insert 0 $belldur
  146.  
  147.     .kbd.val.onoff [expr "{$kbdrep} == {on} ? {select} : {deselect}"]
  148.     .kbd.val.cli set $kbdcli
  149.  
  150.     .mouse.hor.acc.entry delete 0 end
  151.     .mouse.hor.acc.entry insert 0 $mouseacc
  152.     .mouse.hor.thr.entry delete 0 end
  153.     .mouse.hor.thr.entry insert 0 $mousethr
  154.  
  155.     .screen.val.rb.blank [expr "{$screenbla}=={blank} ? {select} : {deselect}"]
  156.     .screen.val.rb.pat   [expr "{$screenbla}!={blank} ? {select} : {deselect}"]
  157.     .screen.val.le.tim.entry delete 0 end
  158.     .screen.val.le.tim.entry insert 0 $screentim
  159.     .screen.val.le.cyc.entry delete 0 end
  160.     .screen.val.le.cyc.entry insert 0 $screencyc
  161. }
  162.  
  163.  
  164. #
  165. # Create all windows, and pack them
  166. #
  167.  
  168. proc labelentry {path text length} {
  169.     frame $path
  170.     label $path.label -text $text
  171.     entry $path.entry -width $length -relief sunken
  172.     pack $path.label -side left -expand y
  173.     pack $path.entry -side right -expand y
  174. }
  175.  
  176. proc createwindows {} {
  177.     #
  178.     # Buttons
  179.     #
  180.  
  181.     frame .buttons
  182.     button .buttons.ok        -command "ok"            -text "Ok"
  183.     button .buttons.apply    -command "writesettings"    -text "Apply"
  184.     button .buttons.cancel    -command "cancel"        -text "Cancel"
  185.     button .buttons.quit    -command "quit"            -text "Quit"
  186.  
  187.     pack .buttons.ok .buttons.apply .buttons.cancel .buttons.quit \
  188.         -side left -expand yes -pady 5
  189.  
  190.     #
  191.     # Bell settings
  192.     #
  193.  
  194.     frame .bell -relief raised -borderwidth 2
  195.     label .bell.label    -text "Bell Settings"
  196.     scale .bell.vol \
  197.         -from 0 -to 100 -length 200 -tickinterval 20 \
  198.         -label "Volume (%)" -orient horizontal \
  199.         -bg Bisque1 -activeforeground Gray
  200.  
  201.     frame .bell.val
  202.     labelentry .bell.val.pit "Pitch (Hz)"    6
  203.     labelentry .bell.val.dur "Duration (ms)" 6
  204.     pack .bell.val.pit -side left -padx 5
  205.     pack .bell.val.dur -side right -padx 5
  206.     pack .bell.label .bell.vol .bell.val -side top -expand yes
  207.  
  208.     #
  209.     # Keyboard settings
  210.     #
  211.  
  212.     frame .kbd -relief raised -borderwidth 2
  213.  
  214.     label .kbd.label -text "Keyboard Repeat Settings"
  215.  
  216.     frame .kbd.val
  217.     checkbutton .kbd.val.onoff \
  218.         -text "On" \
  219.         -onvalue "on" -offvalue "off" -variable kbdrep \
  220.         -relief flat \
  221.         -activebackground Bisque1
  222.     scale .kbd.val.cli \
  223.         -from 0 -to 100 -length 200 -tickinterval 20 \
  224.         -label "Click Volume (%)" -orient horizontal \
  225.         -bg Bisque1 -activeforeground Gray
  226.     pack .kbd.val.onoff -side left -expand yes -fill both
  227.     pack .kbd.val.cli -side left -expand yes
  228.  
  229.     pack .kbd.label -side top -expand yes
  230.     pack .kbd.val -side top -expand yes -pady 2 -fill x
  231.  
  232.     #
  233.     # Mouse settings
  234.     #
  235.  
  236.     frame .mouse -relief raised -borderwidth 2
  237.  
  238.     label .mouse.label -text "Mouse Settings"
  239.     frame .mouse.hor
  240.     labelentry .mouse.hor.acc "Acceleration" 3
  241.     labelentry .mouse.hor.thr "Threshold (pixels)" 3
  242.  
  243.     pack .mouse.hor.acc -side left
  244.     pack .mouse.hor.thr -side right
  245.  
  246.     pack .mouse.label -side top
  247.     pack .mouse.hor -side top -expand yes
  248.  
  249.     #
  250.     # Screen Saver settings
  251.     #
  252.  
  253.     frame .screen -relief raised -borderwidth 2
  254.  
  255.     label .screen.label -text "Screen-saver Settings"
  256.     frame .screen.val
  257.  
  258.     frame .screen.val.rb
  259.     radiobutton .screen.val.rb.blank \
  260.         -variable screenblank -text "Blank" -relief flat \
  261.         -value "blank" -variable screenbla \
  262.         -activebackground Bisque1
  263.     radiobutton .screen.val.rb.pat \
  264.         -variable screenblank -text "Pattern" -relief flat \
  265.         -value "noblank" -variable screenbla \
  266.         -activebackground Bisque1
  267.     pack .screen.val.rb.blank .screen.val.rb.pat -side top -pady 2 -anchor w
  268.     frame .screen.val.le
  269.     labelentry .screen.val.le.tim "Timeout (s)" 5
  270.     labelentry .screen.val.le.cyc "Cycle (s)" 5
  271.     pack .screen.val.le.tim .screen.val.le.cyc -side top -pady 2 -anchor e
  272.  
  273.     pack .screen.val.rb .screen.val.le -side left
  274.  
  275.     pack .screen.label -side top
  276.     pack .screen.val -side top -expand y
  277.  
  278.     #
  279.     # Main window
  280.     #
  281.  
  282.     pack .buttons -side top -fill both
  283.     pack .bell .kbd .mouse .screen -side top -fill both -ipady 5 -expand yes
  284.  
  285.     #
  286.     # Let the user resize our window
  287.     #
  288.     wm minsize . 10 10
  289. }
  290.  
  291. ##############################################################################
  292. # Main program
  293.  
  294. #
  295. # Listen what "xset" tells us...
  296. #
  297.  
  298. readsettings
  299.  
  300. #
  301. # Create all windows
  302. #
  303.  
  304. createwindows
  305.  
  306. #
  307. # Write xset parameters
  308. #
  309.  
  310. dispsettings
  311.  
  312. #
  313. # Now, wait for user actions...
  314. #
  315.